package com.crm.util;

import com.crm.entity.Module;
import java.util.ArrayList;
import java.util.List;

/**
 * 把list<module>转换为List<TreeNOde>
 */
public class TreeNodeUtil {
    /**
     * 获得树菜单：List<module>转换为List<TreeNOde>
     * @return 树菜单List<TreeNOde>
     */
    public static List<com.crm.util.TreeNode> getTree(List<Module> modulelist){
        List<com.crm.util.TreeNode> TreeNodelist=new ArrayList<com.crm.util.TreeNode>();
        //遍历module集合
        for(Module m:modulelist){
            //不是根节点不处理，只把根节点返回去，不是根节点，就必然是某个根节点的子节点，就会被children处理，放入某个根节点中
            if(m.getParentId()==0){
            //把module对象的数据转移到treeNode对象中
            com.crm.util.TreeNode n=new com.crm.util.TreeNode(m.getMname(), m.getMid(), getChildren(modulelist,m.getMid()), m.getPath());
           //把转换的数据加入treelist中
            TreeNodelist.add(n);
            }
        }
        return TreeNodelist;
    }

    /**
     * 遍历模块集合,集合中某个元素的父id,等于传入的id,就是子节点
     * @param modulelist 整个模块集合
     * @param mid
     * @return 子节点集合
     */
    public static List<com.crm.util.TreeNode> getChildren(List<Module> modulelist, Integer mid){
        List<com.crm.util.TreeNode> childrenlist=new ArrayList<com.crm.util.TreeNode>();
        //外层循环遍历父，内层循环遍历子
        //如果z的父id等于m的id，说明z是m 的子
        //此时的z和m都还是module，还需要转化成treeNode
             for(Module z:modulelist){
             if(mid.equals(z.getParentId())){
                com.crm.util.TreeNode childrenNode=new com.crm.util.TreeNode(z.getMname(),z.getMid(), getChildren(modulelist,z.getMid()),z.getPath());
                childrenlist.add(childrenNode);
            }
        }
        return childrenlist;
    }
    /**
     * 递归的方式给每个子节点设置true，父节点设置null
     * @param
     * 	moduleList 自己的权限模块
     * 	treeList 整个树
     * @return 勾选好的树
     * */
    public static List<com.crm.util.TreeNode> getCheckedTree(List<Module> moduleList, List<com.crm.util.TreeNode> treeList) {
        for (com.crm.util.TreeNode n : treeList) {// n:第一层，系统管理，课程管理
            if (!n.getChildren().isEmpty()) {// 如果第一层有子节点
                n.setChecked(null);// 就让第一层这个节点不设置checked
                for (com.crm.util.TreeNode children : n.getChildren()) {// 遍历第二层
                    for (Module m : moduleList) {// 自己的权限
                        // 如果第二层的id和我的id相同，就勾上
                        if (m.getMid().equals(children.getId())) {
                            children.setChecked(true);
                        }
                    }
                }
                getCheckedTree(moduleList, n.getChildren());
            }
        }
        return treeList;
    }
}
